import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.params.SetParams;

import java.util.Set;

public class RedisDemoGeneric {
    public static void test01(Jedis jedis){
        // test01 用来测试get和set命令
        System.out.println("get和set命令");
        // 先清空数据库,避免上一组的命令影响下一组测试的结果
        jedis.flushAll();

        jedis.set("key","111");
        jedis.set("key2","222");
        // 给set设置选项
        SetParams setParams = new SetParams();
        setParams.ex(10);// 设置超时时间,单位是秒
        setParams.nx();// xx设置存在才可以修改 nx不存在才能设置
        jedis.set("key","333",setParams);

        String value = jedis.get("key");
        System.out.println(value);
    }

    public static void test02(Jedis jedis){
        System.out.println("exist 和 del");
        jedis.flushAll();

        jedis.set("key","111");
        jedis.set("key2","222");
        jedis.set("key3","333");
        boolean f = jedis.exists("key");
        System.out.println(f);

        long sum = jedis.del("key"); // 返回删除成功几个元素
        System.out.println(sum);
        boolean g = jedis.exists("key");
        System.out.println(g);

        // del支持删除都个key
        // ... 表示变长参数,可以删除多个key
        sum = jedis.del("key","key2","key3");
        System.out.println(sum);
    }

    public static void test03(Jedis jedis){
        System.out.println("keys");
        jedis.flushAll();

        jedis.set("key","111");
        jedis.set("key2","222");
        jedis.set("key3","333");

        // redis中的key是不重复的,并且是没有顺序的
        Set<String> set = jedis.keys("*");
        System.out.println(set);
    }

    public static void test04(Jedis jedis) throws InterruptedException {
        System.out.println("expire 和 ttl");
        jedis.flushAll();

        jedis.set("key","111");
        // 10s
        jedis.expire("key",10);
        Thread.sleep(3000);

        long time = jedis.ttl("key");

        System.out.println("time " + time);
    }

    public static void test05(Jedis jedis){
        System.out.println("type");
        jedis.flushAll();

        jedis.set("key","111");
        String type = jedis.type("key");
        System.out.println("type: " + type);

        jedis.lpush("key2","111","222","333");
        type = jedis.type("key2");
        System.out.println("type: " + type);

        jedis.hset("key3","f1","100");
        type = jedis.type("key3");
        System.out.println(type);

        jedis.sadd("key4","111","222","333");
        type = jedis.type("key4");
        System.out.println(type);

        jedis.zadd("key5",10,"111");
        type = jedis.type("key5");
        System.out.println("type: " + type);
    }

    public static void main(String[] args) {
        // 连接到redis服务器上
        // JedisPool是redis连接池
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try(Jedis jedis = jedisPool.getResource()) {
            // 从jedis连接池中借用一个jedis连接对象
            // redis 的各种命令都对应着jedis 的各种方法
            // 验证服务器的连通性
//            String pong = jedis.ping();
//            System.out.println(pong);
//            test01(jedis);
            // test02(jedis);

            // test03(jedis);
//            test04(jedis);
//        } catch (InterruptedException e) {
//            throw new RuntimeException(e);

            test05(jedis);
        }
    }
}
